"""
文件处理工具模块
提供临时目录生成、清理等工具函数
"""

import os
import hashlib
import shutil
import time
from typing import Optional


def generate_temp_dir(repo_url: str, branch: str) -> str:
    """
    生成临时目录路径
    
    Args:
        repo_url: 仓库URL
        branch: 分支名
    
    Returns:
        临时目录的完整路径
    """
    # 使用仓库URL和分支名生成唯一的目录名
    repo_name = repo_url.split('/')[-1].replace('.git', '')
    return os.path.join("/tmp/yxyweb", hashlib.md5(f"{repo_url}:{branch}".encode()).hexdigest())


def cleanup_old_dirs(temp_dir: str = "/tmp/yxyweb", retention_minutes: int = 30):
    """
    清理超过指定时间的临时目录
    
    Args:
        temp_dir: 临时目录根路径
        retention_minutes: 保留时间（分钟）
    """
    try:
        current_time = time.time()
        retention_seconds = retention_minutes * 60
        
        if not os.path.exists(temp_dir):
            return
        
        for dir_name in os.listdir(temp_dir):
            dir_path = os.path.join(temp_dir, dir_name)
            if os.path.isdir(dir_path):
                # 获取目录的创建时间
                dir_time = os.path.getctime(dir_path)
                # 如果目录超过保留时间，则删除
                if current_time - dir_time > retention_seconds:
                    print(f"清理过期目录: {dir_path}")
                    shutil.rmtree(dir_path)
    except Exception as e:
        print(f"清理临时目录时出错: {str(e)}")


def ensure_temp_dir_exists(temp_dir: str) -> str:
    """
    确保临时目录存在，如果不存在则创建
    
    Args:
        temp_dir: 临时目录路径
    
    Returns:
        临时目录路径
    """
    if not os.path.exists(temp_dir):
        os.makedirs(temp_dir, exist_ok=True)
        print(f"创建新目录: {temp_dir}")
    else:
        print(f"使用已存在的目录: {temp_dir}")
    
    return temp_dir


def check_dir_age(dir_path: str, max_age_hours: int = 24) -> bool:
    """
    检查目录是否过期
    
    Args:
        dir_path: 目录路径
        max_age_hours: 最大保留时间（小时）
    
    Returns:
        True表示目录已过期，False表示目录未过期
    """
    if not os.path.exists(dir_path):
        return False
    
    dir_age = time.time() - os.path.getctime(dir_path)
    max_age_seconds = max_age_hours * 3600
    
    return dir_age > max_age_seconds


def remove_expired_dir(dir_path: str):
    """
    删除过期的目录
    
    Args:
        dir_path: 目录路径
    """
    try:
        if os.path.exists(dir_path):
            print(f"删除过期目录: {dir_path}")
            shutil.rmtree(dir_path)
    except Exception as e:
        print(f"删除目录时出错: {str(e)}") 